import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

public class javaJson {
    public static void main(String[] args) {
        Gson gson = new Gson();
        Person gz = new Person("gz", 20);

        //1.将javaBean->json字符串
        String strPerson = gson.toJson(gz);
        System.out.println(strPerson);

        //2.json字符串->javaBean
        Person person = gson.fromJson(strPerson, Person.class);
        System.out.println(person);

        //3.javaBean数组->json字符串
        ArrayList<Person> personList = new ArrayList<>();
        personList.add(new Person("gz", 20));
        personList.add(new Person("xx", 21));

        String strPersonList = gson.toJson(personList);
        System.out.println("strPersonList= "+strPersonList);

        //4.将json字符串转成json数组
        //(1)返回类型全路径，底层反射
        //(2)这个type是一个匿名内部类
        //(3)TypeToken无参构造器是protected类型，不在一个包不能访问，
        //(4)这个匿名内部类有自己的无参构造器(隐式)，根据java基础规则，
        // 执行子类无参构造器是默认 super(); ，这样就可以访问protected的类
        Type type = new TypeToken<List<Person>>() {
        }.getType();
        List<Person> personList2 = gson.fromJson(strPersonList, type);
        System.out.println("personList2= "+personList2);

        //map也是一样...
    }
}
